| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- /* eslint-disable @typescript-eslint/no-explicit-any */
- import { NextRequest, NextResponse } from 'next/server';
- import { prisma } from '@/lib/prisma';
- export async function GET(
- request: NextRequest,
- { params }: { params: Promise<{ id: string }> }
- ) {
- try {
- const { id } = await params;
- const importId = parseInt(id);
- if (isNaN(importId)) {
- return NextResponse.json(
- { error: 'Invalid import ID' },
- { status: 400 }
- );
- }
- // Check if import exists
- const importRecord = await prisma.import.findUnique({
- where: { id: importId }
- });
- if (!importRecord) {
- return NextResponse.json(
- { error: 'Import not found' },
- { status: 404 }
- );
- }
- // Get basic summary data
- const totalRecords = await prisma.cintasInstallCalendar.count({
- where: { importId }
- });
- const cintasSummaries = await prisma.cintasSummary.findMany({
- where: { importId },
- orderBy: { week: 'asc' }
- });
- // Get file info
- const file = importRecord.fileId ? await prisma.file.findUnique({
- where: { id: importRecord.fileId }
- }) : null;
- const summary = {
- totalRecords,
- totalWeeks: cintasSummaries.length,
- cintasSummaries: cintasSummaries.map((summary: any) => ({
- week: summary.week,
- trrTotal: summary.trrTotal,
- fourWkAverages: summary.fourWkAverages,
- trrPlus4Wk: summary.trrPlus4Wk,
- powerAdds: summary.powerAdds
- }))
- };
- return NextResponse.json({
- importId,
- fileName: file?.filename || 'Unknown',
- uploadDate: importRecord.createdAt,
- summary,
- summaryExists: cintasSummaries.length > 0
- });
- } catch (error) {
- console.error('Error fetching import summary:', error);
- return NextResponse.json(
- { error: 'Failed to fetch import summary' },
- { status: 500 }
- );
- }
- }
- export async function POST(
- request: NextRequest,
- { params }: { params: Promise<{ id: string }> }
- ) {
- try {
- const { id } = await params;
- const importId = parseInt(id);
- if (isNaN(importId)) {
- return NextResponse.json(
- { error: 'Invalid import ID' },
- { status: 400 }
- );
- }
- // Check if import exists
- const importRecord = await prisma.import.findUnique({
- where: { id: importId }
- });
- if (!importRecord) {
- return NextResponse.json(
- { error: 'Import not found' },
- { status: 404 }
- );
- }
- // Check if summary already exists
- const existingSummaries = await prisma.cintasSummary.count({
- where: { importId }
- });
- if (existingSummaries > 0) {
- // Return existing summary
- const cintasSummaries = await prisma.cintasSummary.findMany({
- where: { importId },
- orderBy: { weekId: 'desc' }
- });
- return NextResponse.json({
- importId,
- summaryGenerated: false,
- message: 'Summary already exists',
- summary: cintasSummaries.map((summary: any) => ({
- week: summary.week,
- trrTotal: summary.trrTotal,
- fourWkAverages: summary.fourWkAverages,
- trrPlus4Wk: summary.trrPlus4Wk,
- powerAdds: summary.powerAdds
- }))
- });
- }
- // Execute the stored procedure to generate summary
- await prisma.$executeRawUnsafe(
- `CALL cintas_calculate_summary(${importId})`
- );
- // Fetch the newly generated summary
- const cintasSummaries = await prisma.cintasSummary.findMany({
- where: { importId },
- orderBy: { weekId: 'desc' }
- });
- return NextResponse.json({
- importId,
- summaryGenerated: true,
- message: 'Summary generated successfully',
- summary: cintasSummaries.map((summary: any) => ({
- week: summary.week,
- trrTotal: summary.trrTotal,
- fourWkAverages: summary.fourWkAverages,
- trrPlus4Wk: summary.trrPlus4Wk,
- powerAdds: summary.powerAdds
- }))
- });
- } catch (error) {
- console.error('Error generating summary:', error);
- return NextResponse.json(
- { error: 'Failed to generate summary', details: error instanceof Error ? error.message : 'Unknown error' },
- { status: 500 }
- );
- }
- }
|